import { getToken, setToken, removeToken,setTimeStamp } from "@/utils/auth";
import { login,getUserInfo,getUserDetailById } from "@/api/user";
import { resetRouter } from '@/router' 
// 状态
const state = {
  token: getToken(),   //设置token位共享状态 初始化vuex的时候 就先从缓存中读取
  userInfo: {} // 定义一个空的对象 不是null 因为后边我要开发userInfo的属性给别人用  userInfo.name
}
// 修改状态
const mutations = {
  setToken(state,token){
    state.token = token //将数据设置给vuex
    //同步给缓存
    setToken(token)
  },
  removeToken(state){
    state.token = null   //将vuex的数据置空
    removeToken()    //同步到缓存
  },
  setUserInfo(state,result){
    state.userInfo = result
  },
  removeUserInfo(state) {
    state.userInfo = {}
  }
}
// 执行异步
const actions = {
  async login(context,data){
    // 调用接口
    const result = await login(data)
    context.commit('setToken',result)
    setTimeStamp() //设置当前的时间戳
  },
  async getUserInfo(context){
    const result = await getUserInfo()  //获取返回值
    // 获取用户详情 头像
    const baseInfo = await getUserDetailById(result.userId)
    const baseResult = { ...result, ...baseInfo } // 将两个接口结果合并
    // 此时已经获取到了用户的基本资料 迫不得已 为了头像再次调用一个接口
    context.commit('setUserInfo',baseResult)
    return baseResult
  },
  logout(context){
    context.commit('removeToken')// 不仅仅删除了vuex中的 还删除了缓存中的
    // 删除用户资料
    context.commit('removeUserInfo') // 删除用户信息
    // 重置多标签
    context.dispatch('tagsView/delAllViews', null, { root: true })
    // 重置路由
    resetRouter()
    // 子模块调用子模块里的方法选哟加上{ root: true }
    context.commit('permission/setRoutes', [], { root: true })
  }
}
export default  {
  namespaced: true,
  state,
  mutations,
  actions
}